/**
 * 购物车状态管理
 */
import { reactive } from 'vue';
import * as uniApi from '@/common/utils/uni-api.js'

// 创建响应式购物车状态
const state = reactive({
  // 购物车商品列表
  items: [],
  // 餐桌ID
  tableId: '',
  // 店铺ID
  shopId: '',
  // 已选择的商品ID列表
  selectedIds: []
});

// 购物车方法
// 加入购物车
const addToCart = (product) => {
  // 检查是否已存在相同规格的商品
  const existingItemIndex = state.items.findIndex(item => 
    item.id === product.id && 
    item.selectedTemp === product.selectedTemp && 
    item.selectedSugar === product.selectedSugar
  );
  
  if (existingItemIndex > -1) {
    // 如果存在，增加数量
    const quantity = product.quantity || 1;
    state.items[existingItemIndex].quantity += quantity;
  } else {
    // 如果不存在，添加新项
    const newItem = {
      ...product,
      cartId: new Date().getTime().toString(),
      checked: true,
      sliding: false
    };
    state.items.push(newItem);
  }
  
  saveCart();
  uniApi.showToast('已添加到购物车');
  return true;
};

// 更新购物车商品数量
const updateItemQuantity = (id, quantity) => {
  const index = state.items.findIndex(item => item.id === id);
  
  if (index > -1) {
    // 如果数量为0则移除该商品
    if (quantity === 0) {
      removeFromCart(id);
      return true;
    }
    
    // 更新商品数量
    state.items[index].quantity = quantity;
    
    // 保存到本地存储
    saveCart();
    
    return true;
  }
  
  return false;
};

// 从购物车移除商品
const removeFromCart = (id) => {
  const index = state.items.findIndex(item => item.id === id);
  if (index > -1) {
    state.items.splice(index, 1);
    
    // 保存到本地存储
    saveCart();
    
    return true;
  }
  
  return false;
};

// 清空购物车
const clearCart = () => {
  state.items = [];
  
  // 保存到本地存储
  saveCart();
  
  return true;
};

// 获取购物车商品总数
const getCartItemCount = () => {
  return state.items.reduce((total, item) => total + (item.quantity || 0), 0);
};

// 获取购物车商品总价
const getCartTotalPrice = () => {
  return state.items.reduce((total, item) => total + item.price * (item.quantity || 0), 0);
};

// 更新购物车总计
const updateCartTotal = () => {
  // 可以在此处添加其他计算逻辑
  return {
    count: getCartItemCount(),
    price: getCartTotalPrice()
  };
};

// 保存购物车到本地存储
const saveCart = () => {
  try {
    uniApi.setStorage(`cart_${state.tableId}_${state.shopId}`, {
      items: state.items,
      tableId: state.tableId,
      shopId: state.shopId
    });
  } catch (e) {
    console.error('保存购物车数据失败', e);
  }
};

// 加载购物车
const loadCart = (tableId, shopId) => {
  state.tableId = tableId || '';
  state.shopId = shopId || '';
  
  // 尝试从本地存储加载购物车数据
  try {
    const cartData = uniApi.getStorage(`cart_${tableId}_${shopId}`);
    if (cartData) {
      state.items = cartData.items || [];
    } else {
      state.items = [];
    }
  } catch (e) {
    console.error('加载购物车数据失败', e);
    state.items = [];
  }
};

// 初始化
loadCart();

// 导出购物车状态和方法
export default {
  // 状态
  state,
  
  // 方法
  addToCart,
  updateItemQuantity,
  removeFromCart,
  clearCart,
  getCartItemCount,
  getCartTotalPrice,
  updateCartTotal,
  saveCart,
  loadCart
}; 